#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<cstdio>
#include<algorithm>
#define debug(a) cout<<#a<<"="<<a<<endl;
using namespace std;
const int maxn=2e5+1000;
typedef long long LL;
inline LL read(){LL x=0,f=1;char ch=getchar();	while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;}
char str[maxn];
char mod1[30];
char mod2[30];
LL cnt1,cnt2=0;
int main(void){
   cin.tie(0);std::ios::sync_with_stdio(false);
   LL n,k;cin>>n>>k;
   LL ave=n/k;
   LL res=n%k;
   LL tot=0;
   for(LL i=1;i<=k;i++){
      if(i&1){
        mod1[++cnt1]=char('a'+i-1);
      }
      else{
        mod2[++cnt2]=char('a'+i-1);
      }
   }
//   debug(cnt1);debug(cnt2);
//   for(LL i=1;i<=cnt1;i++){
//      cout<<mod1[i];
//   }
//   cout<<"\n";
//   for(LL i=1;i<=cnt2;i++){
//      cout<<mod2[i];
//   }
//   cout<<"\n";
   for(LL i=1;i<=k;i++){
      for(LL j=1;j<=ave;j++){
        str[++tot]=(char)('a'+i-1);
      }
   }
//   debug(cnt1);debug(cnt2);
//   debug(res);
   for(LL i=1;i<=min(res,cnt1);i++){ str[++tot]=mod1[i];}

   res-=cnt1;
   if(res>0){
      for(LL i=1;i<=res;i++){
        str[++tot]=mod2[i];
      }
   }
   for(LL i=1;i<=tot;i++){
      cout<<str[i];
   }
   cout<<"\n";
   return 0;
}
